---
id: 复杂度
title: 衡量算法的两个维度
---

## 时间复杂度

由于受语言，运行环境和输入规模的影响，代码的绝对执行时间是无法预估的。
但我们却可以预估代码的基本操作执行次数(计算量)，来判断时间复杂度，执行次数越多，则时间复杂度也就越高。

我有一个好朋友叫张三。  

他家里有2只狗，每天需要遛，且每次只能遛一条，每条遛20分钟。

2*20=40分钟，可以用函数表示 T(n) = 20n。

在这里计算量是2次，

张三很喜欢狗，找了一家宠物店的工作，负责32条狗的洗澡任务。
第一条洗澡用了1分钟，越洗越累。第二条用了2分钟，后面的每一条也都是累加1分钟。

这不是小学时学的 1+2+3+……  加到100 等于多少的问题。
根据高斯算法，此时吃掉整个面包需要 1+2+3+...+(n-1)+ n 即(1+n)×n/2分钟，
也就是0.5n^2 + 0.5n分钟，记作T(n) = 0.5n^2 + 0.5n。


张三每10分钟，可以洗一半的狗，既10分钟剩16条，20分钟还剩8条，30分钟还剩下4条……，
洗的只剩下1条需要多少时间
数字32不断地除以2，涉及数学中的对数。(省略底数2)
10 * log32 = 50分钟。
用函数表示就是T(n) = 10logn。
### 渐进时间复杂度


16  8  4  2  1 

## 空间复杂度





复杂度从数据结构的方向考虑